//
// Created by fengg on 2020/4/23.
//

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;
typedef struct linknode
{
    int coef;//系数
    int expn;//指数
    struct linknode *next;
}Node;
void CreatPolyn(Node **L)   //改。如果用*L的话，是无法修改其本身的。
{
    int n=1;
    Node *p,*q;
    *L=(Node*)malloc(sizeof(Node));
    (*L)->next=NULL;
    q=*L;
    //成对输入数据
    while(n)
    {
        p=(Node*)malloc(sizeof(Node));
        scanf("%d,%d",&p->coef,&p->expn);
        q->next=p;
        q=q->next;
        //printf("\n");
        if(p->coef==0&&p->expn==0)
            n=0;
        p->next=NULL;  //改 == -> = PS 这里应该是等号"="
    }
}
void PolynShow(Node *L,void(*vi)(ElemType,ElemType))
{
    //改了一点,样式你就自个整了
    Node *p=L->next;
    while(p)
    {
        vi(p->coef,p->expn);
        if(p->next && p->expn != 0 && p->coef != 0)
        {
            printf("+");
        }
        p=p->next;
    }
}
void visit(ElemType e,ElemType f)
{
    if(e!=0)
        printf("%dx%d",e,f);
}
Node Mergelist(Node *La,Node *Lb)
{
    Node *pa,*pb,*pc,*Lc;
    pa=La->next;
    pb=Lb->next;
    Lc = (Node *) malloc(sizeof(Node));
    Lc=pc=La;
    while(pa&&pb)
    {
        if(pa->expn<pb->expn)
        {
            pc->next=pb;
            pc=pb;
            pb=pb->next;
        }
        else if(pa->expn>pb->expn)
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;    //改 . 应该是pa 吧 如果我理解错你的意思的话
        }
        else
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;
            pb=pb->next;
        }


    }
    pc->next=pa?pa:pb;

    return *Lc;
}
int main(void)
{
    Node *A,*B,*C;
    C = (Node *) malloc(sizeof(Node));
    //输入多项式A的系数和指数
    CreatPolyn(&A);
    //输入多项式A的系数和指数
    CreatPolyn(&B);
    *C=Mergelist(A,B);
    PolynShow(C,visit);
    return 0;
}